איך המחלקה שלי ?
אז יצרתי שתי מחלקות, האחת Database שהיא אחראית על הקשר עם המסד, והשנייה SqlStatement שהיא אחראית על השאילתה עצמה.
Database : http://pastebin.com/MkhCVpiD
SqlStatement : http://pastebin.com/zSqXLAAy
איך המחלקות ? הם טובות לעבודה עם PDO או שיש עוד דברים שאני צריך לעבוד עליהם ?
תודה (:
10 תשובות
בגדול אחלה.
אם יש בעיות - אתה תיתקל בהם כשתשתמש במחלקה שלך בעצמך.
למשל איך אני עושה שני טרנזקציות במקביל ?
יש דברים שלא מלמדים במדריכי OOP, כמו זה שפונקציה צריכה להחזיר רק סוג נתונים אחד
פונקציות מסוג return transaction object or false זה סלט.
פונקציות מסוימות בכלל לא צריכות להחזיר שום דבר.
מה נותן לך true or false מ rollback? אתה קיבלת true אתה מתעלם. אם יקבלת false - מה תעשה? תנסה שנית?
בתור לקוח של המחלקה אתה אפילו לא תחשוב לנסות שוב, וגם אתה לא צריך. שהמחלקה תנסה שנית לבד. (שזה חסר טועלת בפני עצמו, כי מה השתנה מאז הפעם הקודמת)
פונקציה כזו צריכה או לא להחזיר שום דבר, או לזרוק שגיאה.
עוד דבר, תשכח מהפקודה die. לתמיד.
קודם כל שגיאות לא צריכות להגיע ללקוח בכלל.
שנית, ה die הזה מפסיק את הביצוע של הקוד במקומות אחרים. אולי הייתי באמצע לשלוח אימייל למישהו ופתחתי חיבור לשרת אחר, אחרי זה הלכתי לקרוא רגע משהו מהמסד והוא נפל? נשאר לי בשרת קבצים / דברים פתוחים.
תשכח מ die. אין שום סיבה בתוכנה כלשהי להשתמש בזה.
ואחרי שתוריד את ה die תבין שכל ה try/catch בקונסטרקטור מיותר. שיזרוק שגיאה ישירות לרמה מעל.
מזתומרת שתי טרנזקציות במקביל ? לא נגעתי כל כך בטרנזקציות, רק עשיתי בדיקה במחלקה שלי אם יש שימוש בטרנזקציה..זה טוב או שאני פשוט צריך להשאיר את זה כמו שעשו את זה במחלקה שירשתי ממנה ?
סבבה אז במקום die להשתמש במחלקה לשגיאות ?
ולמה לא try&ctach ? השתמשתי בזה כדי שהמשתמש לא יצטרך לעשות את זה בעצמו אז הכנסתי את זה לתוך הקונסטרקטור
לגבי טרנזקציות יש שני אפשריות - או להעתמק ולהבין מה עושים איתם ומה כדאי שהמחלקה תעשה איתם
או לא להתעמק ולא לעשות איתם שום דבר.
לגבי try/catch - זה מעולה. רק אחרי שתשים אותה - תבין שאין לך ממש מה לכתוב בבלוק של ה catch
בגלל זה זה יהיה מיותר שם.
ואיפה אני יכול ללמוד להתעמק בטרנזקציות ?
אולי ליצור מחלקה של שגיאות ובcatch פשוט להכניס לה את האובייקט $e?
שיצא משו כזה:
http://phpguide.co.il/phplive?code=841
לא. בשביל מה להדפיס משהו?
אתה לא יודע אם הבן אדם שמשתמש במחלקה שלך רוצה בכלל להדפיס משהו.
פשוט תחזיר לו את השגיאה ושיעשה איתה מה שהוא חושב לנכון.
מממ צודק.
אז אתה אומר שכדאי להשאיר את זה ככה, ושהמשתמש יעשה try/catch בעצמו ?
במקרה הספציפי של הקונסטרטור כאן - אתה לא צריך throw כי כבר יש throw מובנה בתוך הקונסטרקטור של PDO.
במקרים אחרי - אתה תמיד מחזיר שגיאה איפה שאתה יכול.